home *** CD-ROM | disk | FTP | other *** search
-
- Here are definition and implementation modules for bios calls
- for use with TDI's Modula-2. I found these on CompuServe. I have
- almost completed a similar interface for xbios calls, that i will post
- shortly.
-
- ----
- #!/bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #!/bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create the files:
- # bioscall.def
- # bioscall.mod
- # This archive created: Mon Feb 10 03:10:05 1986
- # By: Jwahar R. Bammi ()
- export PATH; PATH=/bin:$PATH
- echo shar: extracting "'bioscall.def'" '(1125 characters)'
- if test -f 'bioscall.def'
- then
- echo shar: over-writing existing file "'bioscall.def'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'bioscall.def'
-
- XDEFINITION MODULE BIOScalls;
- X
- XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
- X
- XEXPORT QUALIFIED getmpb, bconstat, bconin, bconout, rwabs, setexc, tickcal,
- X getbpb, bcostat, mediach, drvmap, kbshift;
- X
- XPROCEDURE getmpb( pmpb : ADDRESS ); (* BIOS call #0 *)
- X
- XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT; (* BIOS call #1 *)
- X
- XPROCEDURE bconin( dev : CARDINAL ) : LONGINT; (* BIOS call #2 *)
- X
- XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL ); (* BIOS call #3 *)
- X
- XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
- X: LONGINT; (* BIOS call #4 *)
- X
- XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
- X (* BIOS call #5 *)
- XPROCEDURE tickcal(): LONGINT; (* BIOS call #6 *)
- X
- XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS; (* BIOS call #7 *)
- X
- XPROCEDURE bcostat( dev : CARDINAL ): LONGINT; (* BIOS call #8 *)
- X
- XPROCEDURE mediach( dev :CARDINAL ): LONGINT; (* BIOS call #9 *)
- X
- XPROCEDURE drvmap(): LONGCARD; (* BIOS call #10 *)
- X
- XPROCEDURE kbshift( mode : LONGINT ) : LONGINT; (* BIOS call *11 *)
- X
- XEND BIOScalls.
- SHAR_EOF
- if test 1125 -ne "`wc -c 'bioscall.def'`"
- then
- echo shar: error transmitting "'bioscall.def'" '(should have been 1125
- -characters)'
- fi
- echo shar: extracting "'bioscall.mod'" '(6054 characters)'
- if test -f 'bioscall.mod'
- then
- echo shar: over-writing existing file "'bioscall.mod'"
- fi
- sed 's/^X//' << \SHAR_EOF > 'bioscall.mod'
- XIMPLEMENTATION MODULE BIOScalls;
- X
- XFROM SYSTEM IMPORT ADDRESS , CODE , SETREG , REGISTER;
- X
- X
- XPROCEDURE getmpb( pmpb : ADDRESS ); (* BIOS call #0 *)
- X
- XBEGIN;
- X
- X SETREG(7,pmpb); (* put table address into register D7 *)
- X CODE( 2F07H ); (* push longword D7 onto stack *)
- X CODE(3F3CH,0,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X
- XEND getmpb;
- X
- X
- XPROCEDURE bconstat ( dev : CARDINAL ) : LONGINT; (* BIOS call #1 *)
- X
- XBEGIN;
- X
- X CODE( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,1,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return status of character device *)
- X
- XEND bconstat;
- X
- X
- XPROCEDURE bconin( dev : CARDINAL ) : LONGINT; (* BIOS call #2 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,2,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return input character longword *)
- X
- XEND bconin;
- X
- X
- XPROCEDURE bconout( dev : CARDINAL; ByteOut : CARDINAL ); (* BIOS call #3 *)
- X
- XBEGIN;
- X
- X SETREG(7,ADDRESS(ByteOut)); (* put character into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,3,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X
- XEND bconout;
- X
- X
- XPROCEDURE rwabs( buff : ADDRESS ; rwflag, count, recno, dev : CARDINAL )
- X: LONGINT; (* BIOS call #4 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
- X (* register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X SETREG(7,ADDRESS(recno)); (* put starting logical sector number into *)
- X (* register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X SETREG(7,ADDRESS(count)); (* put sector count into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X SETREG(7,buff); (* put buffer address into register D7 *)
- X CODE( 2F07H ); (* push longword D7 onto stack *)
- X SETREG(7,ADDRESS(rwflag)); (* put read/write flag into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,4,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return mass storage device error *)
- X (* status word *)
- XEND rwabs;
- X
- X
- XPROCEDURE setexc( vecnum : CARDINAL; vec : ADDRESS): ADDRESS;
- X (* BIOS call #5 *)
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,vec); (* put vector address into register D7 *)
- X CODE ( 2F07H ); (* push longword D7 onto stack *)
- X SETREG(7,ADDRESS(vecnum)); (* put vector number into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,5,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN REGISTER(0); (* return old vector address *)
- X
- XEND setexc;
- X
- X
- XPROCEDURE tickcal(): LONGINT; (* BIOS call #6 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X CODE(3F3CH,6,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return system clock in milliseconds *)
- X
- XEND tickcal;
- X
- X
- XPROCEDURE getbpb( dev : CARDINAL ): ADDRESS; (* BIOS call #7 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
- X (* register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,7,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN REGISTER(0); (* return BIOS parameter block pointer *)
- X
- XEND getbpb;
- X
- X
- XPROCEDURE bcostat( dev : CARDINAL ): LONGINT; (* BIOS call #8 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put device number into register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,8,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return device output status word *)
- X
- XEND bcostat;
- X
- X
- XPROCEDURE mediach( dev :CARDINAL ): LONGINT; (* BIOS call #9 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(dev)); (* put mass storage device number into *)
- X (* register D7 *)
- X CODE( 3F07H ); (* push word D7 onto stack *)
- X CODE(3F3CH,9,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return mass storage device media *)
- X (* status word *)
- XEND mediach;
- X
- X
- XPROCEDURE drvmap(): LONGCARD; (* BIOS call #10 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X CODE(3F3CH,10,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGCARD(REGISTER(0)); (* returns longword that maps active *)
- X (* storage units available *)
- XEND drvmap;
- X
- X
- XPROCEDURE kbshift( mode : LONGINT ) : LONGINT; (* BIOS call *11 *)
- X
- XBEGIN;
- X
- X CODE ( 7000H ); (* clear D0 register *)
- X SETREG(7,ADDRESS(mode)); (* put mode into register D7 *)
- X CODE( 2F07H ); (* push longword D7 onto stack *)
- X CODE(3F3CH,11,4E4DH); (* push call number onto stack and call TRAP #13 *)
- X RETURN LONGINT(REGISTER(0)); (* return shift key status word *)
- X
- XEND kbshift;
- X
- X
- XEND BIOScalls.
- SHAR_EOF
- if test 6054 -ne "`wc -c 'bioscall.mod'`"
- then
- echo shar: error transmitting "'bioscall.mod'" '(should have been 6054
- -characters)'
- fi
- # End of shell archive
- exit 0
- --
- Jwahar R. Bammi
- CompuServe: 71515,155
- Brought to you by the Club Network
- The Club (517) 372-3131
- The Club II (313) 334-8877
-